/*
 * Proyecto Manejador de Proyectos
 * @Autor Hector Hurtado
 */
package Mproyectos.entidades;

import java.io.Serializable;
import java.util.Collection;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;

/**
 * Representa un asesor dentro del sistema
 */
@Entity
public class Asesor implements Serializable {

    /**
     * Nombre del asesor
     */
    @Id
    private String nombre;
    /**
     * Documento del asesor
     */
    private String documento;
    /**
     * Lista de asesores del proyecto.
     */
    @OneToMany
    private Collection<Proyecto> proyectos;

    /**
     * Constructor vacio. Necesario para utilizar JPA
     */
    public Asesor() {
    }

    /**
     * Nombre
     *
     * @return el nombre del asesor
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * Nombre
     *
     * @param nombre el nombre del asesor
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * Representa el artista en forma de cadena con el nombre
     *
     * @return Nombre del asesor
     */
    @Override
    public String toString() {
        return getNombre();
    }

    /**
     * Devuelve el codigo hash de la clase deacuerdo al nombre del asesor
     *
     * @return Codigo hash calculado con el nombre del asesor
     */
    @Override
    public int hashCode() {
        int hash = 7;
        hash = 89 * hash + (this.getNombre() != null ? this.getNombre().hashCode() : 0);
        return hash;
    }

    /**
     * Verifica si un objeto es igual a otro. Un asesor es igual a otra si tiene
     * el mismo documento
     *
     * @param obj Objeto con el cual se quiere comparar
     * @return true si el objeto es una asesor y tiene el mismo documento
     */
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Asesor other = (Asesor) obj;
        if ((this.getNombre() == null) ? (other.getNombre() != null) : !this.nombre.equals(other.nombre)) {
            return false;
        }
        return true;
    }

    /**
     * Documento del asesor
     *
     * @return the documento
     */
    public String getDocumento() {
        return documento;
    }

    /**
     * Documento del asesor
     *
     * @param documento the documento to set
     */
    public void setDocumento(String documento) {
        this.documento = documento;
    }

    /**
     * Lista de asesores del proyecto.
     *
     * @return the proyectos
     */
    public Collection<Proyecto> getProyectos() {
        return proyectos;
    }

    /**
     * Lista de asesores del proyecto.
     *
     * @param proyectos the proyectos to set
     */
    public void setProyectos(Collection<Proyecto> proyectos) {
        this.proyectos = proyectos;
    }
}

